This invention relates to programmable logic devices having specialized functional blocks—i.e., blocks that perform functions other than generic programmable logic functions. More particularly, this invention relates to a method for programming such programmable logic devices efficiently when the specialized functions can also be implemented in generic programmable logic or other resources.
Programmable logic devices are well known. Early programmable logic devices were one-time configurable. For example, configuration may have been achieved by “blowing”—i.e., opening—fusible links. Alternatively, the configuration may have been stored in a programmable read-only memory. Those devices generally provided the user with the ability to configure the devices for “sum-of-products” (or “P-TERM”) logic operations. Later, such programmable logic devices incorporating erasable programmable read-only memory (EPROM) for configuration became available, allowing the devices to be reconfigured.
Still later, programmable logic devices incorporating static random access memory (SRAM) elements for configuration became available. These devices, which also can be reconfigured, store their configuration in a nonvolatile memory such as an EPROM, from which the configuration is loaded into the SRAM elements when the device is powered up. These devices generally provide the user with the ability to configure the devices for look-up-table-type logic operations.
As programmable logic devices have become larger, it has become more common to add dedicated blocks to perform particular functions that have become more common in programmable logic devices. For example, at some point, such devices began to be provided with embedded blocks of random access memory that could be configured by the user to act as random access memory, read-only memory, or logic (such as P-TERM logic); such embedded blocks might even be provided in different sizes on the same device. Other types of memory, such as read-only memory (ROM) or shift registers, also have been provided. More recently, multiplier circuits have been provided on programmable logic devices. Whereas in prior programmable logic devices space was not available for dedicated multipliers, current larger devices can accommodate multipliers. This spares users from having to create multipliers by configuring the available logic. Moreover, as described in commonly-assigned U.S. Pat. No. 6,538,470, which is hereby incorporated by reference in its entirety, specialized multiplier blocks may be provided including multipliers and other arithmetic circuits such as adders and/or subtracters and/or accumulators. Such blocks are sometimes referred to as “multiplier-accumulator blocks” or “MAC blocks.” Such blocks, for example, may be useful in digital signal processing, such as is performed in audio applications, and therefore such specialized multiplier blocks also are sometimes referred to as “DSP blocks.”
While it may have been possible to program the earliest programmable logic devices manually, simply by determining mentally where various elements should be laid out, it was common even in connection with such earlier devices to provide programming software that allowed a user to lay out logic as desired and then translate that logic into programming for the programmable logic device. With current larger devices, it would be impractical to attempt to lay out the logic without such software.
The aforementioned specialized blocks present issues that had not existed in prior generations of programmable logic devices. In particular, because such blocks may be relatively large and/or complex, the number of such blocks on any one device may be relatively small. If a user design calls for using a certain number of such blocks, or for performing certain functions that are inferred by the programming software to be performed by such blocks, and the number of such blocks called for by such a user design exceeds the number of such blocks available on a device, previously known programming software would call for a larger device than necessary, or would indicate that the user design cannot be fit on the device (where the user specified a particular device or even the largest device is insufficient)—i.e., a “no-fit” result would be generated. This is so even where it might be possible to implement some of the “specialized” functions in generic programmable logic or in other device resources and doing so might be more efficient than using a larger device (or if the user specified a particular device so that a larger device is not an option, or if there is no larger device). It would be desirable if any programming software or method used with such devices would be able to implement a user logic design taking into account the possibility of performing specialized functions in programmable logic or other resources even where specialized functional blocks are present.